import fs from 'fs-extra'
import { createRequire } from 'module'
import { execSync } from 'child_process'
import { resolveUpdateLog } from './updatelog.mjs'

const require = createRequire(import.meta.url)

// publish
async function resolvePublish() {
  const flag = process.argv[2] ?? 'patch'
  const packageJson = require('../package.json')
  const tauriJson = require('../src-tauri/tauri.conf.json')

  let [a, b, c] = packageJson.version.split('.').map(Number)

  if (flag === 'major') {
    a += 1
    b = 0
    c = 0
  } else if (flag === 'minor') {
    b += 1
    c = 0
  } else if (flag === 'patch') {
    c += 1
  } else throw new Error(`invalid flag "${flag}"`)

  const nextVersion = `${a}.${b}.${c}`
  packageJson.version = nextVersion
  tauriJson.package.version = nextVersion

  // 发布更新前先写更新日志
  const nextTag = `v${nextVersion}`
  await resolveUpdateLog(nextTag)

  await fs.writeFile(
    './package.json',
    JSON.stringify(packageJson, undefined, 2)
  )
  await fs.writeFile(
    './src-tauri/tauri.conf.json',
    JSON.stringify(tauriJson, undefined, 2)
  )

  execSync('git add ./package.json')
  execSync('git add ./src-tauri/tauri.conf.json')
  execSync(`git commit -m "v${nextVersion}"`)
  execSync(`git tag -a v${nextVersion} -m "v${nextVersion}"`)
  execSync(`git push`)
  execSync(`git push origin v${nextVersion}`)
  console.log(`Publish Successfully...`)
}

resolvePublish()
